﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using OcenyOpisowe.Core.ModelMappers;

namespace OcenyOpisowe.Controllers
{
	/// <summary>
	/// Klasa bazowa dla wszystkich kontrollerów projektu.
	/// Udostępnia on właściwości dla operowania obiektami bazodanowymi.
	/// </summary>
	/// <typeparam name="TRepository">Typ repozytorium obsługiwanego przez dany kontroller.</typeparam>
	public class BaseController<TRepository> : Controller, IModelMapperController
	{
		#region Publiczne własciwości klasy
		/// <summary>
		/// Repozytorium dla obiektów bazodanowych. Służy do wyszukiwania i operowania na obiektach.
		/// </summary>
		public TRepository Repository { get; private set; }
		/// <summary>
		/// Mapper dla obiektów modelu do obiektów bazodanowych.
		/// </summary>
		public IModelMapper ModelMapper { get; private set; }
		#endregion

		#region Konstruktor klasy
		/// <summary>
		/// Inicjuje instancję kontrollera przyjmującego repozytorium danych specyficzne dla danego kontrollera.
		/// </summary>
		/// <param name="repository">Repozytorium służące do pobierania danych dla konkretnej strony.</param>
		/// <param name="mapper">Mapper dla obiektów bazodanowych.</param>
		protected BaseController(TRepository repository, IModelMapper mapper)
		{
			Repository = repository;
			ModelMapper = mapper;
		}
		#endregion
	}
}
